/*
 * 
 * LegendShop 多用户商城系统
 * 
 *  版权所有,并保留所有权利。
 * 
 */
package com.legendshop.oa.service;

import com.legendshop.dao.support.CriteriaQuery;
import com.legendshop.dao.support.PageSupport;
import com.legendshop.oa.dto.DailyLogQueryDto;
import com.legendshop.oa.dto.UserOverProjectTimeInputDto;
import com.legendshop.oa.model.TaskEstimate;

import java.util.Date;
import java.util.List;

/**
 * The Class TaskEstimateService. 任务时间估计服务接口
 */
public interface TaskEstimateService {

	/**
	 * 根据商城获取任务时间估计列表
	 */
	public List<TaskEstimate> getTaskEstimate(String userName);

	/**
	 * 根据Id获取任务时间估计
	 */
	public TaskEstimate getTaskEstimate(Long id);

	/**
	 * 删除任务时间估计
	 */
	public boolean deleteTaskEstimate(TaskEstimate taskEstimate);

	/**
	 * 保存任务时间估计
	 */
	public Long saveTaskEstimate(TaskEstimate taskEstimate);

	/**
	 * 更新任务时间估计
	 */
	public void updateTaskEstimate(TaskEstimate taskEstimate);

	/**
	 * 查询任务时间估计列表
	 */
	public PageSupport getTaskEstimate(CriteriaQuery cq);

	/**
	 * 计算任务工时
	 * @param taskId
	 * @return
	 */
	public List<TaskEstimate> getTaskEstimateByTask(Long taskId);

	/**
	 * 根据Id获取任务时间估计,没有reviewed过的才可以删除
	 */
	public TaskEstimate getUnReviewedTaskEstimate(Long taskEstimateId);

	public List<TaskEstimate> getTaskEstimateByDay(Date date, String userName);

	public PageSupport<TaskEstimate> getTaskEstimateByDay(Date startDate, Date endDate, DailyLogQueryDto dailyLogQueryDto);

	/**
	 * 根据任务查找工时
	 * @param taskId
	 * @param curPageNO
	 * @return
	 */
	public PageSupport<TaskEstimate> getTaskEstimateByTask(Long taskId, String curPageNO);

	/**
	 * 查找当前用户的在某一天的任务
	 * @param date1
	 * @param userName1
	 * @param curPageNO
	 * @return
	 */
	public PageSupport<TaskEstimate> getTaskEstimateByDay(Date date1, String userName1, String curPageNO);
	
	/**
	 * 计算某个用户在一周或者一个月的工时
	 */
	public Long getTaskEstimateHoursByUser(String userName, Date startDate, Date endDate);
	
	/**
	 *  审核某个用户在一周或者一个月的工时的状态
	 */
	public Integer updateTaskEstimateHoursByUser(String userName, Date startDate, Date endDate);

	/**
	 *  用户是否在一个项目填写了超过规定的时长，如果返回结果不为空，则表示超标了
	 */
	public List<UserOverProjectTimeInputDto> isUserOverProjectTimeInput(String userName, Date startDate, Date endDate);
}
